package rpcx_device_manager_centre

import "time"

type Method int64

const (
	Method_ADD            Method = 0
	Method_GET            Method = 1
	Method_UPDATE         Method = 2
	Method_LIST           Method = 3
	Method_DELETE         Method = 4
	Method_GET_GBID       Method = 5
	Method_GET_ProvinceID Method = 6
	Method_WHERELIST      Method = 7
)

// DeviceStatus 设备是否在线
type DeviceStatus struct {
	DeviceSipID     string
	ChannelID       int32
	ParentChannelID int32
	ParentSipID     string
	OnLine          bool
	Status          string
	FaultDesc       string
}

type DevIpcType struct {
	//设备ID
	DeviceSipID       string `json:"DeviceID"`          // ID变更  Id -> ID
	LinkMode          int64  `json:"LinkMode"`          // 通道信息的 链接型号 :  1- TCP方式，2- UDP方式，3- RTP方式，4-RTP/RTSP，5-RTSP/HTTP ,6-RTMP/HTTP
	IpcType           int64  `json:"IpcType"`           //摄像头类型  1=NVR , 2=IPC , 3=枪机 , 4=球机 , 5=全景相机 , 6=移动监拍 , 7=无人机 , 8=机器人 , 9=手机APP , 10=智能报警设备 ,11 = 通过openAPI接入设备
	DccID             string `json:"DccID"`             //接入中心ID
	DeviceNetworkZone int64  `json:"DeviceNetworkZone"` //设备所在网络区域   1=信息管理大区(内网),2=互联网大区,3=公共互联网,0=未知
	AccessSolutionID  string `json:"AccessSolutionID"`  ////接入方案
}

type SubsetDevice struct {
	DeviceSipID      string //设备名称
	DeviceName       string
	AccessSolutionID string //接入方案:  国标接入, 企标接入 , 非标接入, 第三方接入
	AddrIP           string
	Port             int64
	DccID            string  //链接中心ID
	ParentSipID      string  //父级设备
	ParentChannelID  int64   //父级通道ID
	Longitude        float64 //经度
	Latitude         float64 //纬度
	OnlineStatus     int     //在线状态:是/否 //变更: 布尔更改数字  1= 在线, 2=线  其他=故障
	DeviceTree       string
}

// DeviceInfo 设备信息
// 设备ID
type DeviceInfo struct {
	DeviceSipID string `gorm:"type:varchar(255);primaryKey;comment:设备ID" json:"DeviceID"` //
	//锁定
	MediaID string `gorm:"type:varchar(255);primaryKey;comment:媒体ID" json:"MediaID"`
	//设备名称
	DeviceName string `gorm:"type:varchar(255);comment:设备名称;" json:"DeviceName"`
	//设备组
	DeviceGroup string `gorm:"type:varchar(255);comment:设备组" json:"DeviceGroup"` //新增字段  设备组
	//设备树
	DeviceTree string `gorm:"type:varchar(255);comment:设备树" json:"DeviceTree"` //设备树
	//设备用途
	DeviceUse string `gorm:"type:varchar(255);comment:设备用途" json:"DeviceUse"`
	//设备厂家 //变更: 设备品牌ID 取代
	DeviceVendor string `gorm:"type:varchar(255);comment:设备厂家名称" json:"DeviceVendor"`
	//型号  //变更: 设备品牌ID 取代
	DeviceModel string `gorm:"type:varchar(255);comment:型号" json:"DeviceModel"`
	//系统版本 //变更: 设备品牌ID 取代
	DeviceVersion string `gorm:"type:varchar(255);comment:系统版本" json:"DeviceVersion"`
	//设备 品牌ID LoginType=DeviceBrandID
	DeviceBrandID int64 `gorm:"type:bigint(20);default:0;comment:设备品牌ID "`
	//摄像头品牌与SDK版本 1=HK_SDK_6.1.9.4,  2=DH_SDK_3.055
	LoginType int64 `gorm:"type:bigint(20);default:0;comment:摄像头品牌与SDK版本:1=HK_SDK_6.1.9.4,2=DH_SDK_3.055" json:"LoginType"`

	//设备的地理位置, Device_city
	DeviceCity string `gorm:"type:varchar(255);comment:地市" json:"DeviceCity" `
	//设备原始ID
	DeviceRawID string `gorm:"type:varchar(255);comment:设备原始id" json:"DeviceRawID" `
	//通道ID
	RawChannelID int64 `gorm:"type:bigint(20);comment:设备原始通道ID"  json:"DeviceRawChannelID"`
	//设备图标
	DeviceIcons string `gorm:"type:varchar(255);comment:设备封面"  json:"DeviceIcons"`

	//视频流本地录制
	IsRecorder bool `gorm:"type:tinyint(1);comment:视频流本地录制" json:"IsRecorder"`
	//是否开起多码率
	IsMultiRate bool `gorm:"type:tinyint(1);comment:是否开起多码率" json:"IsMultiRate"`

	//信道数
	ChannelCount int64 `gorm:"type:bigint(20);comment:信道总数" json:"ChannelCount"`
	//接入方案:  国标接入, 企标接入 , 非标接入, 第三方接入
	AccessSolutionID string `gorm:"type:varchar(255);comment:接入方案ID"  json:"ConnectSolutionID"`
	//链接中心ID
	DccID string `gorm:"type:varchar(255);index;comment:链接中心ID" json:"DccID"`

	//状态 禁用/启用 //变更: ForbidUse 禁止使用(前端不显示此设备)
	Status bool `gorm:"type:tinyint(1);default:1;comment:状态:禁用/启用" json:"Status"`
	//在线状态:是/否 //变更: 布尔更改数字  1= 在线, 2=线  其他=故障
	Online bool `gorm:"type:tinyint(1);comment:在线状态:是/否" json:"Online"`

	// IpcType 摄像头类型:  1=NVR , 2=IPC , 3=枪机 , 4=球机 , 5=全景相机 ,
	//6=移动监拍 , 7=无 , 8=机器人 , 9=手机APP , 10=智能报警设备
	//11 =无人机 12 = 无人机机场
	IpcType int64 `gorm:"type:bigint(20);default:2;comment:摄像头类型:1=Nvr,2=IPC,3=枪机,4=球机,5=全景相机"  json:"IpcType"`
	//父级设备 (是否 NVR 通过 IpcType 判断)
	ParentSipID string `gorm:"type:varchar(255);comment:父级设备ID"  json:"ParentDeviceSipID"`
	//父级通道ID
	ParentChannelID int64 `gorm:"type:bigint(20);comment:父级通道ID" json:"ParentChannelID"`
	//1 直接接入  0间接接入
	IsDirectConnect bool `gorm:"type:tinyint(1);default:0;comment:设备是否直连" json:"IsDirectConnect"`
	//设备地址
	DeviceIP string `gorm:"type:varchar(255);comment:设备地址" json:"DeviceIP"`
	//设备端口
	DevicePort int64 `gorm:"type:bigint(20);comment:设备端口" json:"DevicePort"`
	//账号
	UserName string `gorm:"type:varchar(255);comment:账号" json:"UserName"`
	//密码
	UserPassword string `gorm:"type:varchar(255);comment:密码" json:"UserPassword"`
	//RtmpUrl (推流固定URL)
	RtmpUrl string `gorm:"type:varchar(255);comment:推流固定URL" json:"RtmpUrl"`

	//LinkMode 连接协议:  1- TCP方式，2- UDP方式
	LinkMode int64 `gorm:"type:bigint(20);default:0;comment:连接协议: 1- TCP方式，2- UDP方式" json:"LinkMode"`

	//ProtoType 推流协议: 1- RTSP协议 ,3- RTP方式，4-RTP/RTSP，5-RTSP/HTTP ,6-RTMP/HTTP
	ProtoType int64 `gorm:"type:int(25);default:0;comment:推流协议:1- RTSP协议 ,3- RTP方式，4-RTP/RTSP，5-RTSP/HTTP ,6-RTMP/HTTP" json:"ProtoType"`

	//码流通道: 0-主码流，1-4虚拟码流，共 5个码流
	StreamType int64 `gorm:"type:bigint(20);default:0;comment:码流通道: 0-主码流，1-4虚拟码流" json:"StreamType"`

	//经度
	Longitude float64 `gorm:"type:double(10,6);comment:经度" json:"Longitude"`
	//纬度
	Latitude float64 `gorm:"type:double(10,6);comment:纬度" json:"Latitude"`

	//注册时间
	LastTimestamp int64 `gorm:"type:bigint(20);default:0;comment:最近上线时间" json:"LastTimestamp"`
	//最后更新时间
	UpdateTimestamp int64 `gorm:"type:bigint(20);default:0;comment:最后更新时间" json:"UpdateTimestamp"`
	//最近上线时间
	RegTimestamp int64 `gorm:"type:bigint(20);default:0;comment:注册时间" json:"RegTimestamp"`
	//设备是否有订阅
	IsSubScribe bool `gorm:"type:tinyint(1);default:0;comment:设备是否有订阅" json:"IsSubscribe"`

	//IsNat 是否有网闸
	IsNat bool `gorm:"type:tinyint(1);default:0;comment:是否有网闸"`
	//网闸映射ID
	GatewayMappingID int64 `gorm:"type:bigint(20);default:0;comment:网闸映射ID"`

	//设备所在网络区域   1=信息管理大区(内网),2=互联网大区,3=公共互联网,0=未知
	DeviceNetworkZone int64 `gorm:"type:bigint(20);default:0;comment:设备所在网络区域:1=信息管理大区(内网),2=互联网大区,3=公共互联网,0=未知"`
	//国标域
	SipArea string `gorm:"type:varchar(255);comment:国标域" json:"SipArea"`
	//模拟设备(是否为模拟国标的设备),TODO
	Simulation bool `gorm:"type:tinyint(1);comment:模拟设备(是否为模拟国标的设备)" json:"Simulation"`
	//旧设备ID  设备移除终身不再使用 DELETE
	OldDeviceSipID string `gorm:"type:varchar(191);default:0;comment:设备移除终身不再使用"`
	//是否推流设备
	IsPullStreamDevice bool `gorm:"type:tinyint(1);comment:推流设备:是/否" json:"IsPullStreamDevice"`

	// TODO 移动到订阅关系表
	//SubscribeType int `gorm:"comment:订阅类型"`
}

// Gateway  服务安全接入网闸
type Gateway struct {
	GatewayMappingID int64 `gorm:"type:bigint(20);primaryKey;comment: 自增 ID"`
	//安全网闸ID
	GatewayID int64 `gorm:"type:bigint(20);comment:安全网闸 ID"`
	//服务ID  外网设备接入的服务的ID(接入中心ID or媒体中心ID)
	ServiceID string `gorm:"type:varchar(191);comment:服务ID "`
	//服务类型  外网设备接入的服务的类型(接入中心or媒体中心)
	ServiceName string `gorm:"type:varchar(191);comment:服务类型"`
	//内网IP
	IP string `gorm:"type:varchar(255);comment:内网 媒体接收视频流的IP"`
	//内网端口
	Port int64 `gorm:"type:int(10);default:10000;comment:内网 起始端口, 默认:10000, 总数500"`
	//映射的外网IP
	NatIP string `gorm:"type:varchar(255);comment: 通过网闸映射的外网IP"`
	//映射的外网端口
	NatPort int64 `gorm:"type:int(10);comment:通过网闸外网端口"`
}

// GateArea  网闸地域
type GateArea struct {
	// 网闸ID
	GatewayID int64 `gorm:"type:bigint(20);primaryKey;comment:网闸ID"`
	//网闸名称
	GatewayName string `gorm:"type:varchar(255);comment:网闸名称"`
	//网闸所在地域
	GatewayCity string `gorm:"type:varchar(255);comment:网闸所在城市"`
}

// CameraPresetPoints 预制点list
type CameraPresetPoints struct {
	ID              string `gorm:"primaryKey;comment:ID"`
	DeviceSipID     string `gorm:"type:varchar(255);comment:设备ID"`        /*设备ID*/
	ChannelID       int64  `gorm:"type:bigint(20);comment:设备原始channelID"` /*通道号*/
	Name            string `gorm:"type:varchar(255);comment:预置点名称"`
	VideoStreamMode int64  `gorm:"type:bigint(20);comment:视频推流方式"`                     /*视频推流方式*/
	PresetCmd       uint8  `gorm:"type:tinyint(4);comment:预置命令"`                       /*预置命令*/
	PresetIndex     int64  `gorm:"type:bigint(20);comment:预置点序号"`                      /*预置点序号*/
	Tid             string `gorm:"type:varchar(255);comment:事务ID"`                     /*事务ID*/
	IpcType         int64  `gorm:"type:bigint(20);comment:设备IPC类型: 0_nvr 1_ipc 2_无人机"` /*设备IPC类型: 0_nvr 1_ipc 2_无人机*/
	IsDirectConnect bool   `gorm:"type:tinyint(1);comment:是否直连"`                       /*是否直连*/
	ParentSipID     string `gorm:"type:varchar(255);comment:父级设备ID"`                   /*父级设备ID*/
	ParentChannelID int64  `gorm:"type:bigint(20);comment:父级管道ID"`                     /*父级设备通道号*/
	Status          bool   `gorm:"type:tinyint(1);comment:预置点状态: 是否成功配置到摄像头"`
}

// Subscribe 订阅关系
type Subscribe struct {
	//设备ID
	ID       string `gorm:"primaryKey"`
	DeviceId string `gorm:"type:varchar(255);index;comment:设备ID"`
	//报警起始级别
	StartAlarmPriority int64 `gorm:"type:bigint(20);default:3;comment:报警起始级别"`
	//报警终止级别
	EndAlarmPriority int64 `gorm:"type:bigint(20);default:3;comment:报警终止级别"`
	//报警方式
	AlarmMethod int64 `gorm:"type:bigint(20);default:8;comment:报警方式 8=变电站现场违章作业报警"`
	//图片服务器地址
	PicServer string `gorm:"type:varchar(255);comment:图片服务器地址" `

	ChannelID       int32  `gorm:"type:int(10);comment:设备原始channelID"` /*通道号*/
	ParentSipID     string `gorm:"type:varchar(255);comment:父级设备ID"`   /*父级设备ID*/
	ParentChannelID int32  `gorm:"type:int(10);comment:父级管道ID"`        /*父级设备通道号*/
	IsCancel        bool   `gorm:"type:tinyint(1);comment:是否取消订阅"`     //是否取消订阅

	CreatedAt time.Time `gorm:"comment:创建时间"` //是否取消订阅
	UpdatedAt time.Time `gorm:"comment:更新时间"` //是否取消订阅
}

// TimeParam 时间转换
type TimeParam struct {
	Year   int64
	Month  int64
	Day    int64
	Hour   int64
	Minute int64
	Second int64
}

// HeartBeatInfo 心跳信息
type HeartBeatInfo struct {
	DccId string
	Ping  int64
	Pong  int64
}

// ControlResponse 通用控制回复
type ControlResponse struct {
	ClientID string
	DeviceID string
	Result   string
	EventID  string
	AppID    string
}

// ModifyParam 设备布防
type ModifyParam struct {
	DeviceSipID       string //设备ID
	VideoStreamMode   int64  //视频推流方式 1_RTSP 2_SDK 3_ISUP(EHOME)
	IpcType           int64  //设备IPC类型
	IsDirectConnect   bool   //是否直连 1_直连 0_间接连接
	ChannelID         int64  //设备通道号
	ParentChannel     int64  //父级通道号
	ParentSipID       string //父级设备ID
	ProtocVersion     string //协议版本
	ConnectSolutionID string //接入方案ID
	DeviceName        string //设备名称
	IsCancel          bool   //是否布防
}

// HistoryFile 历史文件
type HistoryFile struct {
	DeviceID  string
	StartTime int64
	EndTime   int64
	FileSize  int64
}

// UpdateStatus 用于更新设备是否启用 禁用
type UpdateStatus struct {
	DeviceSipID string `json:"DeviceID"`
	Status      bool   `json:"Status"`
}

// DeviceStatusStatistics 设备状态统计
type DeviceStatusStatistics struct {
	//自增ID
	Uid int64 `gorm:"primaryKey;comment:自增ID"`
	//设备ID
	DeviceID string `gorm:"type:varchar(255);index;comment:设备ID"`
	//上下线状态
	OnlineStatus int `gorm:"type:int(11);comment:-1 下线 1 上线"`
	//上线或者下线时间
	StatusTime time.Time `gorm:"type:datetime(0);comment:上下线时间"`
	//在线时长 多少 S
	OnlineTime uint64 `gorm:"type:bigint(20);comment:在线时长"`
}
